<!DOCTYPE html>
<html lang="zh-CN">
<head><meta name="generator" content="Hexo 3.9.0">
  <meta charset="utf-8">
  <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
  
  <title itemprop="name">一文教会你用IDEA追踪bug | 耿超Blog</title>
  
    <link rel="shortcut icon" href="https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/28.jpg">
  
  <meta http-equiv="x-dns-prefetch-control" content="on">
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+SerifMerriweather|Merriweather+Sans|Source+Code+Pro|Ubuntu:400,700|Noto+Serif+SC" media="all">
  <link rel="dns-prefetch" href="//cdn.jsdelivr.net">
  <link rel="stylesheet" id="saukra_css-css" href="/css/style.css" type="text/css" media="all">


  <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.6/dist/jquery.fancybox.min.css">

  <link rel="stylesheet" href="/css/lib.min.css" media="all">
  <link rel="stylesheet" href="/css/font.css" media="all">
  <link rel="stylesheet" href="/css/insight.css" media="all">
  <link rel="stylesheet" href="/css/jquery.fancybox.min.css" media="all">
  <link rel="stylesheet" href="/css/zoom.css" media="all">
  <link rel="stylesheet" type="text/css" href="/css/sharejs.css">
<!--   <link rel="stylesheet" id="saukra_css-css" href="https://2heng.xin/wp-content/cache/autoptimize/css/autoptimize_ad42a61f4c7d4bdd9f91afcff6b5dda5.css
" type="text/css" media="all"> -->
  <script>
  /*Initial Variables*/
  var mashiro_option = new Object();
  var mashiro_global = new Object();
  mashiro_option.NProgressON = true;
  /* 
   * 邮箱信息之类的东西可以填在这里，这些js变量基本都作用于sakura-app.js
   * 这样的设置仅是为了方便在基于PHP开发的主题中设置js变量，既然移植到了Node上，我想或许可以精简这一逻辑吧
   */
  mashiro_option.email_domain = "";
  mashiro_option.email_name = "";
  mashiro_option.cookie_version_control = "";
  mashiro_option.qzone_autocomplete = false;
  mashiro_option.site_name = "BigBoss耿超";
  mashiro_option.author_name = "耿超";
  mashiro_option.site_url = "https://www.gengchao.vip";
  mashiro_option.v_appId = "aeY1WNVHlNPxnev04uP4OGiN-gzGzoHsz";
  mashiro_option.v_appKey = "eC65yOIwHWdj1SI18Dc25mV2";
  mashiro_option.mathjax = "0";
  mashiro_option.qq_api_url = "https://api.mashiro.top/qqinfo/"; 
  mashiro_option.qq_avatar_api_url = "https://api.mashiro.top/qqinfo/";

  // mashiro_option.jsdelivr_css_src = "https://cdn.jsdelivr.net/gh/moezx/cdn@3.4.5/css/lib.min.css";
  // mashiro_option.float_player_on = true;

  /*End of Initial Variables*/
  </script>
  <script type="text/javascript">
  var bg = "https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/3.jpg,https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/9.jpg,https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/10.jpg".split(",");
  var bgindex = Math.floor(Math.random()*bg.length);
  if (!!window.ActiveXObject || "ActiveXObject" in window) { //is IE?
    alert('朋友，IE浏览器未适配哦~');
  }
  </script>
  <style type="text/css">
  .hljs-ln{border-collapse:collapse}.hljs-ln td{padding:0}.hljs-ln-n:before{content:attr(data-line-number)}
  </style>
  <style type="text/css">.site-top .lower nav{display:block !important;}.author-profile i,.post-like a,.post-share .show-share,.sub-text,.we-info a,span.sitename,.post-more i:hover,#pagination a:hover,.post-content a:hover,.float-content i:hover{color:#FE9600}.feature i,.download,.navigator i:hover,.links ul li:before,.ar-time i,span.ar-circle,.object,.comment .comment-reply-link,.siren-checkbox-radio:checked + .siren-checkbox-radioInput:after{background:#FE9600}::-webkit-scrollbar-thumb{background:#FE9600}.download,.navigator i:hover,.link-title,.links ul li:hover,#pagination a:hover,.comment-respond input[type='submit']:hover{border-color:#FE9600}.entry-content a:hover,.site-info a:hover,.comment h4 a,#comments-navi a.prev,#comments-navi a.next,.comment h4 a:hover,.site-top ul li a:hover,.entry-title a:hover,#archives-temp h3,span.page-numbers.current,.sorry li a:hover,.site-title a:hover,i.iconfont.js-toggle-search.iconsearch:hover,.comment-respond input[type='submit']:hover{color:#FE9600}.comments .comments-main{display:block !important;}.comments .comments-hidden{display:none !important;}background-position:center center;background-attachment:inherit;}
  </style>
</head>
</html>
<body class="page-template page-template-user page-template-page-analytics page-template-userpage-analytics-php page page-id-1297 chinese-font serif isWebKit">
  <div class="scrollbar" id="bar">
  </div>
  <a href="#" class="cd-top faa-float animated"></a>
  <section id="main-container">
    <div class="headertop filter-dim">
  <div id="banner_wave_1"></div>
  <div id="banner_wave_2"></div>
  <figure id="centerbg" class="centerbg">
    <div class="focusinfo no-select">
     <!-- <div class="header-tou">
        <a href="https://www.gengchao.vip">
          <img src="https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/21.jpg">
        </a>
      </div>-->
      <div class="header-info">
        <p>虽千万人，吾往矣！！</p>
        <div class="top-social_v2">
          <li id="bg-pre">
            <img class="flipx" src="https://cdn.jsdelivr.net/gh/honjun/cdn@1.6/img/other/next-b.svg">
          </li>
          
            
              
                <li>
                  <a href="http://github.com/geng-chao" target="_blank" class="social-github" title="github">
                    <img src="https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/social/github.png">
                  </a>
                </li>
              
            
              
                <li>
                  <a href="https://y.qq.com/portal/profile.html#stat=y_new.top.user_pic" target="_blank" class="social-github" title="wangyiyun">
                    <img src="https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/social/wangyiyun.png">
                  </a>
                </li>
              
            
              
                <li>
                  <a href="http://weibo.com/mashirozx?is_all=1" target="_blank" class="social-github" title="email">
                    <img src="https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/social/email.svg">
                  </a>
                </li>
              
            
              
                <li class="wechat">
                  <a href="/#">
                    <img src="https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/social/wechat.png">
                  </a>
                  <div class="wechatInner">
                    <img src="https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/31.jpg">
                  </div>
                </li>
              
            
          
          <li id="bg-next">
            <img src="https://cdn.jsdelivr.net/gh/honjun/cdn@1.6/img/other/next-b.svg">
          </li>
        </div>
      </div>
    </div>
  </figure>
  <div id="video-container" style="">
    <video style="object-fit: fill" id="bgvideo" class="video" video-name="" src="" width="auto" preload="auto">
    </video>
    <div id="video-btn" class="loadvideo videolive">
    </div>
    <div id="video-add">
    </div>
    <div class="video-stu">
    </div>
  </div>
  <div class="headertop-down faa-float animated" onclick="headertop_down()">
    <span>
      <i class="fa fa-chevron-down" aria-hidden="true">
      </i>
    </span>
  </div>
</div>
    <div id="page" class="site wrapper">
      <header class="site-header no-select gizle sabit" role="banner">
  <div class="site-top">
    <div class="site-branding">
      <span class="site-title">
        <span class="logolink moe-mashiro">
          <a href="/">
            <span class="sakurasono">BigBoss</span>
            <span class="shironeko">耿超</span>
          </a>
        </span>
      </span>
    </div>
    <div class="searchbox search-form-submit">
      <i class="iconfont js-toggle-search iconsearch icon-search">
      </i>
    </div>
    <div id="show-nav" class="showNav mobile-fit">
      <div class="line line1">
      </div>
      <div class="line line2">
      </div>
      <div class="line line3">
      </div>
    </div>
    <div class="lower-cantiner">
      <div class="lower">
        <nav class="mobile-fit-control hide">
          <ul id="menu-new" class="menu">
            
              <li>
                <a href="/">
                  <span class="faa-parent animated-hover">
                    <i class="fa  fa-fort-awesome faa-shake" aria-hidden="true"></i>
                    首页
                  </span>
                </a>
                
              </li>
            
              <li>
                <a href="/archives">
                  <span class="faa-parent animated-hover">
                    <i class="fa  fa-archive faa-shake" aria-hidden="true"></i>
                    归档
                  </span>
                </a>
                
                  <ul class="sub-menu">
                    
                      <li>
                        <a href="/categories/技术/">
                          <i class="fa fa-code" aria-hidden="true"></i>
                          技术
                        </a>
                      </li>
                    
                      <li>
                        <a href="/categories/生活/">
                          <i class="fa fa-file-text-o" aria-hidden="true"></i>
                          生活
                        </a>
                      </li>
                    
                      <li>
                        <a href="/categories/资源/">
                          <i class="fa fa-cloud-download" aria-hidden="true"></i>
                          资源
                        </a>
                      </li>
                    
                      <li>
                        <a href="/categories/随想/">
                          <i class="fa fa-commenting-o" aria-hidden="true"></i>
                          随想
                        </a>
                      </li>
                    
                      <li>
                        <a href="/categories/转载/">
                          <i class="fa fa-book" aria-hidden="true"></i>
                          转载
                        </a>
                      </li>
                    
                  </ul>
                
              </li>
            
              <li>
                <a href="javascript:;">
                  <span class="faa-parent animated-hover">
                    <i class="fa  fa-list-ul faa-vertical" aria-hidden="true"></i>
                    清单
                  </span>
                </a>
                
                  <ul class="sub-menu">
                    
                      <li>
                        <a href="/tags/悦读/">
                          <i class="fa fa-th-list faa-bounce" aria-hidden="true"></i>
                          书单
                        </a>
                      </li>
                    
                      <li>
                        <a href="/bangumi/">
                          <i class="fa fa-film faa-vertical" aria-hidden="true"></i>
                          番组
                        </a>
                      </li>
                    
                      <li>
                        <a href="/music/">
                          <i class="fa fa-headphones" aria-hidden="true"></i>
                          歌单
                        </a>
                      </li>
                    
                      <li>
                        <a href="/tags/图集/">
                          <i class="fa fa-photo" aria-hidden="true"></i>
                          图集
                        </a>
                      </li>
                    
                  </ul>
                
              </li>
            
              <li>
                <a href="/comment/">
                  <span class="faa-parent animated-hover">
                    <i class="fa  fa-pencil-square-o faa-tada" aria-hidden="true"></i>
                    留言板
                  </span>
                </a>
                
              </li>
            
              <li>
                <a href="/links/">
                  <span class="faa-parent animated-hover">
                    <i class="fa  fa-link faa-shake" aria-hidden="true"></i>
                    友人帐
                  </span>
                </a>
                
              </li>
            
              <li>
                <a href="/donate/">
                  <span class="faa-parent animated-hover">
                    <i class="fa  fa-heart faa-pulse" aria-hidden="true"></i>
                    赞赏
                  </span>
                </a>
                
              </li>
            
              <li>
                <a href="/">
                  <span class="faa-parent animated-hover">
                    <i class="fa  fa-leaf faa-wrench" aria-hidden="true"></i>
                    关于
                  </span>
                </a>
                
                  <ul class="sub-menu">
                    
                      <li>
                        <a href="/about/">
                          <i class="fa fa-meetup" aria-hidden="true"></i>
                          我？
                        </a>
                      </li>
                    
                      <li>
                        <a href="/theme-sakura/">
                          <i class="fa iconfont icon-sakura" aria-hidden="true"></i>
                          主题
                        </a>
                      </li>
                    
                      <li>
                        <a href="/lab/">
                          <i class="fa fa-cogs" aria-hidden="true"></i>
                          Lab
                        </a>
                      </li>
                    
                  </ul>
                
              </li>
            
              <li>
                <a href="/client/">
                  <span class="faa-parent animated-hover">
                    <i class="fa  fa-android faa-vertical" aria-hidden="true"></i>
                    客户端
                  </span>
                </a>
                
              </li>
            
              <li>
                <a href="/atom.xml">
                  <span class="faa-parent animated-hover">
                    <i class="fa  fa-rss faa-pulse" aria-hidden="true"></i>
                    RSS
                  </span>
                </a>
                
              </li>
            
          </ul>
        </nav>
      </div>
    </div>
  </div>
</header>

      <link rel="stylesheet" type="text/css" href="/css/sharejs.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.4.2/tocbot.css">
<div class="pattern-center-blank"></div>

<div id="content" class="site-content">
  <div id="primary" class="content-area">
    <main id="main" class="site-main" role="main">
      <article id="post-1" class="post-1 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized">
        <div class="toc"></div>
        <!--<div class="toc-entry-content"><!-- 套嵌目录使用（主要为了支援评论）-->
        
          <header class="entry-header">
            <h1 class="entry-title">一文教会你用IDEA追踪bug</h1>
            <p class="entry-census">耿超&nbsp;·&nbsp;2020-3-12&nbsp;·&nbsp;<span id="busuanzi_value_page_pv"></span>次阅读</p></p>

            <hr>
          </header>
        
        <div class="entry-content">
          <h2 id="一文教会你用IDEA追踪bug（图文版）"><a href="#一文教会你用IDEA追踪bug（图文版）" class="headerlink" title="一文教会你用IDEA追踪bug（图文版）"></a>一文教会你用IDEA追踪bug（图文版）</h2><p>Debug 用来追踪代码的运行流程，通常在程序运行过程中出现异常，启用 Debug 模式可以分析定位异常发生的位置，以及在运行过程中参数的变化。通常我们也可以启用 Debug 模式来跟踪代码的运行流程去学习三方框架的源码。</p>
<p>在 Intellij IDEA 中使用好 Debug，主要包括如下内容：</p>
<p>Debug 开篇</p>
<p>基本用法 &amp; 快捷键</p>
<p>变量查看</p>
<p>计算表达式</p>
<p>智能步入</p>
<p>断点条件设置</p>
<p>多线程调试</p>
<p>回退断点</p>
<p>中断 Debug</p>
<h3 id="Debug-开篇"><a href="#Debug-开篇" class="headerlink" title="# Debug 开篇"></a><strong># Debug 开篇</strong></h3><hr>
<p>首先看下 IDEA 中 Debug 模式下的界面。如下是在 IDEA 中启动 Debug 模式，进入断点后的界面，我这里是 Windows，可能和 Mac 的图标等会有些不一样。就简单说下图中标注的 8 个地方：</p>
<p>1.以 Debug 模式启动服务，左边的一个按钮则是以 Run 模式启动。在开发中，我一般会直接启动 Debug 模式，方便随时调试代码。</p>
<p>2.断点：在左边行号栏单击左键，或者快捷键 Ctrl+F8 打上 / 取消断点，断点行的颜色可自己去设置。</p>
<p>3.Debug 窗口：访问请求到达第一个断点后，会自动激活 Debug 窗口。如果没有自动激活，可以去设置里设置，如图 1.2。</p>
<p>4.调试按钮：一共有 8 个按钮，调试的主要功能就对应着这几个按钮，鼠标悬停在按钮上可以查看对应的快捷键。在菜单栏 Run 里可以找到同样的对应的功能，如图 1.4。</p>
<p>5.服务按钮：可以在这里关闭 / 启动服务，设置断点等。</p>
<p>6.方法调用栈：这里显示了该线程调试所经过的所有方法，勾选右上角的 [Show All Frames] 按钮，就不会显示其它类库的方法了，否则这里会有一大堆的方法。</p>
<p>7.Variables：在变量区可以查看当前断点之前的当前方法内的变量。</p>
<p>8.Watches：查看变量，可以将 Variables 区中的变量拖到 Watches 中查看</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgLjib5DY69uc26maPUx5c433ibllguSsP8jeJK5mnIuZ2TUy9ic0Mryweg/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<p>在设置里勾选 Show debug window on breakpoint，则请求进入到断点后自动激活 Debug 窗口.</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgKB79qQe1QA7F9Om2CLBJnw89rqdRUibgFTQrBOmNicZNzMlYEvrXnv3A/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<p>如果你的 IDEA 底部没有显示工具栏或状态栏，可以在 View 里打开，显示出工具栏会方便我们使用。可以自己去尝试下这四个选项</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgqzFrlUV8eXgUEIy4AnDicwNNzg0aMFktjJygiamUOKtXcQmLKdrIibuOw/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<p>在菜单栏 Run 里有调试对应的功能，同时可以查看<a href="http://mp.weixin.qq.com/s?__biz=MzI4Njc5NjM1NQ==&amp;mid=2247484579&amp;idx=2&amp;sn=5f252603cb05f7fba91b5302a22a0c4b&amp;chksm=ebd63b8fdca1b2996dd05aa4de42485756713f7f586e840fd5a02cecf10004a633bd49ce3738&amp;scene=21#wechat_redirect" target="_blank" rel="noopener">对应的快捷键</a>。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgT0dWBnjmBXYU6xe6pb4vPUibWLibdwndLjj2nGyeSPaE86T8icEZPMD0A/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<h3 id="基本用法-amp-快捷键"><a href="#基本用法-amp-快捷键" class="headerlink" title="# 基本用法 &amp; 快捷键"></a><strong># 基本用法 &amp; 快捷键</strong></h3><hr>
<p>Debug 调试的功能主要对应着图一中 4 和 5 两组按钮：</p>
<p>1、首先说第一组按钮，共 8 个按钮，从左到右依次如下：</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgZcFghor3ia3ibbu3MNz5OxJgC8icB75s9mGcAmRXiayloOAFeMZbicMPDHw/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<p>Show Execution Point (Alt + F10)：如果你的光标在其它行或其它页面，点击这个按钮可跳转到当前代码执行的行。</p>
<p>Step Over (F8)：步过，一行一行地往下走，如果这一行上有方法不会进入方法。</p>
<p>Step Into (F7)：步入，如果当前行有方法，可以进入方法内部，一般用于进入自定义方法内，不会进入官方类库的方法，如第 25 行的 put 方法。</p>
<p>Force Step Into (Alt + Shift + F7)：强制步入，能进入任何方法，查看底层源码的时候可以用这个进入官方类库的方法。</p>
<p>Step Out (Shift + F8)：步出，从步入的方法内退出到方法调用处，此时方法已执行完毕，只是还没有完成赋值。</p>
<p>Drop Frame (默认无)：回退断点，后面章节详细说明。</p>
<p>Run to Cursor (Alt + F9)：运行到光标处，你可以将光标定位到你需要查看的那一行，然后使用这个功能，代码会运行至光标行，而不需要打断点。</p>
<p>Evaluate Expression (Alt + F8)：计算表达式，后面章节详细说明。</p>
<p>2、第二组按钮，共 7 个按钮，从上到下依次如下：</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWg8nHmoQk4dWTL7Nbv4dicnYaAcibl8EVxenZBSmsTa3wUW2TaVtZIGLmA/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<p>Rerun ‘xxxx’：重新运行程序，会关闭服务后重新启动程序。</p>
<p>Update ‘tech’ application (Ctrl + F5)：更新程序，一般在你的代码有改动后可执行这个功能。而这个功能对应的操作则是在服务配置里，如下图</p>
<p>Resume Program (F9)：恢复程序，比如，你在第 20 行和 25 行有两个断点，当前运行至第 20 行，按 F9，则运行到下一个断点 (即第 25 行)，再按 F9，则运行完整个流程，因为后面已经没有断点了。</p>
<p>Pause Program：暂停程序，启用 Debug。目前没发现具体用法。</p>
<p>Stop ‘xxx’ (Ctrl + F2)：连续按两下，关闭程序。有时候你会发现关闭服务再启动时，报端口被占用，这是因为没完全关闭服务的原因，你就需要查杀所有 JVM 进程了。</p>
<p>View Breakpoints (Ctrl + Shift + F8)：查看所有断点，后面章节会涉及到。</p>
<p>Mute Breakpoints：哑的断点，选择这个后，所有断点变为灰色，断点失效，按 F9 则可以直接运行完程序。再次点击，断点变为红色，有效。如果只想使某一个断点失效，可以在断点上右键取消 Enabled，如图 2.4，则该行断点失效。</p>
<p>更新程序，On ‘Update’ actions，执行更新操作时所做的事情，一般选择’Update classes and resources’，即更新类和资源文件。</p>
<p>一般配合热部署插件会更好用，如 JRebel，这样就不用每次更改代码后还要去重新启动服务。如何激活 JRebel，在最后章节附上。</p>
<p>下面的 On frame deactivation，在 IDEA 窗口失去焦点时触发，即一般你从 idea 切换到浏览器的时候，idea 会自动帮你做的事情，一般可以设置 Do nothing，频繁切换会比较消耗资源的。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgnNRnsa9KVDIpRYdcQOE5CibicP7PU5DsZK9pmRibNrXxau3jXpOHQyl4g/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgbaLdKWGHGJ6ehXZQlLhYD6qJqPciaJmsrQ9cZYAfNYwJ5ONo5lUPlOg/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<h3 id="变量查看"><a href="#变量查看" class="headerlink" title="# 变量查看"></a><strong># 变量查看</strong></h3><hr>
<p>在 Debug 过程中，跟踪查看变量的变化是非常必要的，这里就简单说下 IDEA 中可以查看变量的几个地方，相信大部分人都了解。</p>
<p>1、如下，在 IDEA 中，参数所在行后面会显示当前变量的值。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgRfLkne96ib4uibbKceFyzoUAW6yU3LGUeFkj1BXQiaWCfhr4voaTZYyyA/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<p>2、光标悬停到参数上，显示当前变量信息。点击打开详情如图 3.3。我一般会使用这种方式，快捷方便。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgEOEODCkjPbqgDibgGKib3Bj2p4B3oGdvreibIoQ36tXOZ9NxxsV2Bz9EQ/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<p>[图 3.2]</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWg8tyzZTu3UpzsdsXgyKhcDt7tU0Ue1fLdw7Itmic5Yc8BfYRNamCA0mg/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<p>3、在 Variables 里查看，这里显示当前方法里的所有变量。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgPo2QT1TogGrvOI4dNwwMATPIicUAcxpNCgWy4YphGMzrel9MuLvLichQ/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<p>4、在 Watches 里，点击 New Watch，输入需要查看的变量。或者可以从 Variables 里拖到 Watche 里查看。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgXMUeMcNJ6yOmg0iaG01kRB5omIAtq3rkNWjibvvDsZY7and79k1fU6VA/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<p>如果你发现你没有 Watches，可能在下图所在的地方。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgnOdKJ8noDLicUtr7ZicyuIhVOmn22KiaVBsnicpKyI2JPy2icMRhhtBPROw/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgca6LtiakFjxqcbNYNDpzXyukk6V4UjcibicG5uNQoDcs7GtV27pdGHQxQ/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<h3 id="计算表达式"><a href="#计算表达式" class="headerlink" title="# 计算表达式"></a><strong># 计算表达式</strong></h3><hr>
<p>在前面提到的计算表达式如图 4.1 的按钮，Evaluate Expression (Alt + F8) 。可以使用这个操作在调试过程中计算某个表达式的值，而不用再去打印信息。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgmCRbjVbL7AOeKNtSwke2Q9CMQWfLhk044EYngKcWnMftNoQia7ExG3g/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<p>1、按 Alt + F8 或按钮，或者，你可以选中某个表达式再 Alt + F8，弹出计算表达式的窗口，如下，回车或点击 Evaluate 计算表达式的值。</p>
<p>这个表达式不仅可以是一般变量或参数，也可以是方法，当你的一行代码中调用了几个方法时，就可以通过这种方式查看查看某个方法的返回值。</p>
<p><img src="https://mmbiz.qpic.cn/mmbiz_png/eQPyBffYbufKVn5KdmJcGaIiaPF97nPWgDDnZWibhxwuclCPFnMiaMgx1L2CicZdAnKsQzQCIQU6ImC64BCjmfquMQ/640?wx_fmt=png&amp;tp=webp&amp;wxfrom=5&amp;wx_lazy=1&amp;wx_co=1" alt="img"></p>
<p>2、设置变量，在计算表达式的框里，可以改变变量的值，这样有时候就能很方便我们去调试各种值的情况了不是。</p>
<p><img src="" alt="img"></p>
<h3 id="智能步入"><a href="#智能步入" class="headerlink" title="# 智能步入"></a><strong># 智能步入</strong></h3><hr>
<p>想想，一行代码里有好几个方法，怎么只选择某一个方法进入。之前提到过使用 Step Into (Alt + F7) 或者 Force Step Into (Alt + Shift + F7) 进入到方法内部，但这两个操作会根据方法调用顺序依次进入，这比较麻烦。</p>
<p>那么智能步入就很方便了，智能步入，这个功能在 Run 里可以看到，Smart Step Into (Shift + F7)，如图 </p>
<p><img src="" alt="img"></p>
<p>按 Shift + F7，会自动定位到当前断点行，并列出需要进入的方法，如图 5.2，点击方法进入方法内部。</p>
<p>如果只有一个方法，则直接进入，类似 Force Step Into。</p>
<p><img src="" alt="img"></p>
<h3 id="断点条件设置"><a href="#断点条件设置" class="headerlink" title="# 断点条件设置"></a><strong># 断点条件设置</strong></h3><hr>
<p>通过设置断点条件，在满足条件时，才停在断点处，否则直接运行。</p>
<p>通常，当我们在遍历一个比较大的集合或数组时，在循环内设置了一个断点，难道我们要一个一个去看变量的值？那肯定很累，说不定你还错过这个值得重新来一次。</p>
<p>1、在断点上右键直接设置当前断点的条件，如图 6.1，我设置 exist 为 true 时断点才生效。</p>
<p><img src="" alt="img"></p>
<p>2、点击 View Breakpoints (Ctrl + Shift + F8)，查看所有断点。</p>
<p>Java Line Breakpoints 显示了所有的断点，在右边勾选 Condition，设置断点的条件。</p>
<p>勾选 Log message to console，则会将当前断点行输出到控制台，如下图2 </p>
<p>勾选 Evaluate and log，可以在执行这行代码是计算表达式的值，并将结果输出到控制台。</p>
<p><img src="" alt="img"></p>
<p><img src="" alt="img"></p>
<p>3、再说说右边的 Filters 过滤，这些一般情况下不常用，简单说下意思。</p>
<p>Instance filters：实例过滤，输入实例 ID(如图 6.5 中的实例 ID)，但是我这里没有成功，不知道什么原因，知道的朋友留个言。</p>
<p>Class filters：类过滤，根据类名过滤，同样没有成功….</p>
<p>Pass count：用于循环中，如果断点在循环中，可以设置该值，循环多少次后停在断点处，之后的循环都会停在断点处。</p>
<p><img src="" alt="img"></p>
<p><img src="" alt="img"> </p>
<p><strong>4、异常断点，通过设置异常断点，</strong>在程序中出现需要拦截的异常时，会自动定位到异常行。</p>
<p>如图 下图。点击 + 号添加 Java Exception Breakpoints，添加异常断点。然后输入需要断点的异常类，如图 6.7，之后可以在 Java Exception Breakpoints 里看到添加的异常断点。</p>
<p>我这里添加了一个 NullPointerException 异常断点，如图 6.8，出现空指针异常后，自动定位在空指针异常行。</p>
<p><img src="" alt> </p>
<h3 id="多线程调试"><a href="#多线程调试" class="headerlink" title="# 多线程调试"></a><strong># 多线程调试</strong></h3><hr>
<p>一般情况下我们调试的时候是在一个线程中的，一步一步往下走。但有时候你会发现在 Debug 的时候，想发起另外一个请求都无法进行了？</p>
<p>那是因为 IDEA 在 Debug 时默认阻塞级别是 ALL，会阻塞其它线程，只有在当前调试线程走完时才会走其它线程。可以在 View Breakpoints 里选择 Thread，如图 7.1，然后点击 Make Default 设置为默认选项。</p>
<p><img src="" alt="img"></p>
<p>切换线程，在图 7.2 中 Frames 的下拉列表里，可以切换当前的线程，如下我这里有两个 Debug 的线程，切换另外一个则进入另一个 Debug 的线程。</p>
<p><img src="" alt="img"></p>
<h3 id="回退断点"><a href="#回退断点" class="headerlink" title="# 回退断点"></a><strong># 回退断点</strong></h3><hr>
<p>在调试的时候，想要重新走一下流程而不用再次发起一个请求？</p>
<p>1、首先认识下这个方法调用栈，如图 8.1，首先请求进入 DemoController 的 insertDemo 方法，然后调用 insert 方法，其它的 invoke 我们且先不管，最上面的方法是当前断点所在的方法。</p>
<p><img src="" alt="img"></p>
<p>2、断点回退</p>
<p>所谓的断点回退，其实就是回退到上一个方法调用的开始处，在 <a href="http://mp.weixin.qq.com/s?__biz=MzI4Njc5NjM1NQ==&amp;mid=2247488006&amp;idx=1&amp;sn=d5c66d84724b1deebac6604749d04bf5&amp;chksm=ebd62d2adca1a43cb136b5740621e25854537054b9b3cac7451fd21ea55c0fc247e07a49d8cd&amp;scene=21#wechat_redirect" target="_blank" rel="noopener">IDEA</a> 里测试无法一行一行地回退或回到到上一个断点处，而是回到上一个方法。</p>
<p>回退的方式有两种，一种是 Drop Frame 按钮 (图 8.2)，按调用的方法逐步回退，包括三方类库的其它方法 (取消 Show All Frames 按钮会显示三方类库的方法，如下图2)。</p>
<p>第二种方式，在调用栈方法上选择要回退的方法，右键选择 Drop Frame(图 8.4)，回退到该方法的上一个方法调用处，此时再按 F9(Resume Program)，可以看到程序进入到该方法的断点处了。</p>
<p>但有一点需要注意，断点回退只能重新走一下流程，之前的某些参数 / 数据的状态已经改变了的是无法回退到之前的状态的，如对象、集合、更新了数据库数据等等。</p>
<p><img src="" alt="img"></p>
<p><img src="" alt="img"></p>
<p><img src="" alt="img"></p>
<h3 id="中断-Debug"><a href="#中断-Debug" class="headerlink" title="# 中断 Debug"></a><strong># 中断 Debug</strong></h3><hr>
<p>想要在 Debug 的时候，中断请求，不要再走剩余的流程了？</p>
<p>有些时候，我们看到传入的参数有误后，不想走后面的流程了，怎么中断这次请求呢 (后面的流程要删除数据库数据呢….)，难道要关闭服务重新启动程序？嗯，我以前也是这么干的。</p>
<p>确切的说，我也没发现可以直接中断请求的方式 (除了关闭服务)，但可以通过 Force Return，即强制返回来避免后续的流程，如下图1。</p>
<p>点击 Force Return，弹出 Return Value 的窗口，我这个方法的返回类型为 Map，所以，我这里直接返回 results，来强制返回，从而不再进行后续的流程。或者你可以 new HashMap&lt;&gt;()。</p>
<p><img src="" alt="img"></p>
<p><img src="" alt="img"></p>

        </div>
        <!-- .entry-content -->
        <div class="single-reward">
          <div class="reward-open">赏
            <div class="reward-main">
              <ul class="reward-row">
                <li class="alipay-code"><img src="https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/custom/donate/AliPayQR.jpg"></li>
                <li class="wechat-code"><img src="https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/custom/donate/WeChanQR.jpg"></li>
              </ul>
            </div>
          </div>
        </div>
        <div style="text-align:center; width: 100%" class="social-share share-mobile" data-disabled="diandian, tencent"></div>
        <footer class="post-footer">
          <div class="post-lincenses"><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh" target="_blank" rel="nofollow"><i class="fa fa-creative-commons" aria-hidden="true"></i> 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a></div>
          <div class="post-tags">
          </div>
          <div class="post-share">
            <div class="social-share sharehidden share-component"></div>
            <i class="iconfont show-share icon-forward"></i>
          </div>
        </footer><!-- .entry-footer -->
      </article>
      <!-- #post-## -->
      <div class="toc" style="background: none;"></div>
      <section class="post-squares nextprev">
        
        
          
            <div class="post-nepre full next">
          
            <a href="/2020/03/11/三个好用的网站，及学编程的技巧/" rel="next">
              <div class="background">
                <img class="lazyload" src="https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/loader/orange.progress-bar-stripe-loader.svg" data-src="https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/25846A61B799665CCF058EC684D5CC86.jpg" style="width: 100%; height: 100%; object-fit: cover; pointer-events: none;" onerror="imgError(this,3)" src="https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/25846A61B799665CCF058EC684D5CC86.jpg">
              </div>
              <span class="label">
              Next Post</span>
              <div class="info">
                <h3>
                三个好用的网站，及学编程的技巧</h3>
                <hr>
              </div>
            </a>
          </div>
        
      </section>
      
<div id="vcomments"></div>
<script>
  window.onload = function(){
      var valine = new Valine();
      valine.init({
        el: '#vcomments',
        appId: "aeY1WNVHlNPxnev04uP4OGiN-gzGzoHsz",
        appKey: "eC65yOIwHWdj1SI18Dc25mV2",
        path: window.location.pathname,
        placeholder: "你是我一生只会遇见一次的惊喜 ..."
      })
  }
</script>

      <section class="author-profile">
        <div class="info" itemprop="author" itemscope="" itemtype="http://schema.org/Person">
          <a href="www.gcweb.top" class="profile gravatar"><img src="https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/21.jpg" itemprop="image" alt="耿超" height="70" width="70"></a>
          <div class="meta">
            <span class="title">Author</span>
            <h3 itemprop="name">
            <a href="www.gcweb.top" itemprop="url" rel="author">耿超</a>
            </h3>
          </div>
        </div>
        <hr>
        <p><i class="iconfont icon-write"></i>Just Do It</p>
      </section>
    </main><!-- #main -->
  </div><!-- #primary -->
</div>



    </div>    
    <div class="ins-search">
    <div class="ins-search-mask"></div>
    <div class="ins-search-container">
        <div class="ins-input-wrapper">
            <input type="text" class="ins-search-input" placeholder="请输入关键词..."/>
            <span class="ins-close ins-selectable"><i class="fa fa-times-circle"></i></span>
        </div>
        <div class="ins-section-wrapper">
            <div class="ins-section-container"></div>
        </div>
    </div>
</div>
<script>
(function (window) {
    var INSIGHT_CONFIG = {
        TRANSLATION: {
            POSTS: '文章',
            // PAGES: '页面',
            CATEGORIES: '分类',
            TAGS: '标签',
        },
        ROOT_URL: '/',
        CONTENT_URL: '/content.json',
    };
    window.INSIGHT_CONFIG = INSIGHT_CONFIG;
})(window);
</script>
    <!-- <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      &copy; 2020 耿超<br>
      powered_by <a href="http://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer> -->
<footer id="colophon" class="site-footer" role="contentinfo">
  <div class="site-info">
    <div class="footertext">
      <div class="img-preload">
        <img src="https://cdn.jsdelivr.net/gh/honjun/cdn@1.6/img/other/wordpress-rotating-ball-o.svg">
        <img src="https://cdn.jsdelivr.net/gh/honjun/cdn@1.6/img/other/disqus-preloader.svg">
      </div>
      <p style="color: #666666;">&copy 2018</p>
    </div>
    <div class="footer-device">
    <p style="font-family: 'Ubuntu', sans-serif;">
        <span style="color: #b9b9b9;">Theme <a href="https://github.com/honjun/hexo-theme-sakura" target="_blank" style="color: #b9b9b9;;text-decoration: underline dotted rgba(0, 0, 0, .1);">Sakura</a> <i class="iconfont icon-sakura rotating" style="color: #ffc0cb;display:inline-block"></i> by <a href="https://2heng.xin/" target="_blank" style="color: #b9b9b9;;text-decoration: underline dotted rgba(0, 0, 0, .1);">Mashiro</a>&<a href="https://www.hojun.cn/" target="_blank" style="color: #b9b9b9;;text-decoration: underline dotted rgba(0, 0, 0, .1);">Hojun</a>, Powered by Hexo, Hosted by Coding Pages</a>
        </span>
      </p>
    </div>
  </div><!-- .site-info -->
</footer>



<!-- <script src="/js/tocbot.js"></script> -->
<script src="//code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.6/dist/jquery.fancybox.min.js"></script>


<script type="text/javascript" src="/js/lib.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js"></script>
<script type="text/javascript" src="/js/InsightSearch.js"></script>
<script type="text/javascript" src="/js/jquery.fancybox.min.js"></script>
<script type="text/javascript" src="/js/zoom.min.js"></script>
<script type="text/javascript" src="/js/sakura-app.js"></script>
<script src="//cdn1.lncld.net/static/js/3.0.4/av-min.js"></script>
<script src='//unpkg.com/valine@1.3.4/dist/Valine.min.js'></script>
<script src="/js/botui.js"></script>
<!-- 不蒜子 网页计数器 -->
<script src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.4.2/tocbot.min.js"></script> -->
<script type="text/javascript">
/* <![CDATA[ */
if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
  var Poi = {"pjax":"1","movies":{"url": "https://cdn.jsdelivr.net/gh/geng-chao/sp@1.0","name":"j.mp4","live":"close"},"windowheight":"fixed","codelamp":"close","ajaxurl":"","order":"asc","formpostion":"bottom"};
} else {
  var Poi = {"pjax":"1","movies":{"url": "https://cdn.jsdelivr.net/gh/geng-chao/sp@1.0","name":"j.mp4","live":"open"},"windowheight":"auto","codelamp":"close","ajaxurl":"","order":"asc","formpostion":"bottom"};
}
/* ]]> */

</script>
<script>
$(document).ready(function() {
  if ($(".toc").length > 0 && document.body.clientWidth > 1200) {
    if ($(".pattern-center").length > 0) { //有图的情况
      tocbot.init({
          // Where to render the table of contents.
          tocSelector: '.toc', // 放置目录的容器
          // Where to grab the headings to build the table of contents.
          contentSelector: '.entry-content', // 正文内容所在
          // Which headings to grab inside of the contentSelector element.
          scrollSmooth: true,
          headingSelector: 'h1, h2, h3, h4, h5', // 需要索引的标题级别
          headingsOffset: -400,
          scrollSmoothOffset: -85
      });
    } else {
      tocbot.init({
          // Where to render the table of contents.
          tocSelector: '.toc', // 放置目录的容器
          // Where to grab the headings to build the table of contents.
          contentSelector: '.entry-content', // 正文内容所在
          // Which headings to grab inside of the contentSelector element.
          scrollSmooth: true,
          headingSelector: 'h1, h2, h3, h4, h5', // 需要索引的标题级别
          headingsOffset: -85,
          scrollSmoothOffset: -85
      });
    }
    var offsetTop = $('.toc').offset().top - 95;
    window.onscroll = function() {
      var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
      if (scrollTop >= offsetTop) {
        $('.toc').addClass('toc-fixed');
      } else {
        $('.toc').removeClass('toc-fixed');
      }
    }
  }
});
</script>

    <div class="openNav no-select" style="height: 50px;">
      <div class="iconflat no-select" style="width: 50px; height: 50px;">
        <div class="icon"></div>
      </div>
      <div class="site-branding search-form-submit">
        <i class="iconfont js-toggle-search iconsearch icon-search"></i>
      </div>
    </div>
  </section>
  <script type="text/javascript">
    var windowWidth = $(window).width(); if (windowWidth > 768) { document.write('<script type="text/javascript" src="/js/sakura.js"><\/script>'); }
  </script>


  <div id="mo-nav" class="">
  <div class="m-avatar">
    <img src="https://cdn.jsdelivr.net/gh/geng-chao/PicGo/img/21.jpg">
  </div>
  <p style="text-align: center; color: #333; font-weight: 900; font-family: 'Ubuntu', sans-serif; letter-spacing: 1.5px">BigBoss耿超</p>
  <p style="text-align: center; word-spacing: 20px;">
    
      
        <a href="http://github.com/geng-chao" class="fa fa-github" target="_blank" style="color: #333; margin-left:20px"></a>
      
        <a href="http://weibo.com/mashirozx?is_all=1" class="fa fa-weibo" target="_blank" style="color: #dd4b39; margin-left:20px"></a>
      
        <a href="https://wpa.qq.com/msgrd?v=3&uin=2420479774&site=qq&menu=yes" class="fa fa-qq" target="_blank" style="color: #25c6fe; margin-left:20px"></a>
      
    
  </p>
  <ul id="menu-new-1" class="menu">
    
      <li>
        <a href="/">
          <span class="faa-parent animated-hover">
            <i class="fa  fa-fort-awesome faa-shake" aria-hidden="true"></i>
            首页
          </span>
        </a>
        
      </li>
    
      <li>
        <a href="/archives">
          <span class="faa-parent animated-hover">
            <i class="fa  fa-archive faa-shake" aria-hidden="true"></i>
            归档
          </span>
        </a>
        
          <ul class="sub-menu">
            
              <li>
                <a href="/categories/技术/">
                  <i class="fa fa-code" aria-hidden="true"></i>
                  技术
                </a>
              </li>
            
              <li>
                <a href="/categories/生活/">
                  <i class="fa fa-file-text-o" aria-hidden="true"></i>
                  生活
                </a>
              </li>
            
              <li>
                <a href="/categories/资源/">
                  <i class="fa fa-cloud-download" aria-hidden="true"></i>
                  资源
                </a>
              </li>
            
              <li>
                <a href="/categories/随想/">
                  <i class="fa fa-commenting-o" aria-hidden="true"></i>
                  随想
                </a>
              </li>
            
              <li>
                <a href="/categories/转载/">
                  <i class="fa fa-book" aria-hidden="true"></i>
                  转载
                </a>
              </li>
            
          </ul>
        
      </li>
    
      <li>
        <a href="javascript:;">
          <span class="faa-parent animated-hover">
            <i class="fa  fa-list-ul faa-vertical" aria-hidden="true"></i>
            清单
          </span>
        </a>
        
          <ul class="sub-menu">
            
              <li>
                <a href="/tags/悦读/">
                  <i class="fa fa-th-list faa-bounce" aria-hidden="true"></i>
                  书单
                </a>
              </li>
            
              <li>
                <a href="/bangumi/">
                  <i class="fa fa-film faa-vertical" aria-hidden="true"></i>
                  番组
                </a>
              </li>
            
              <li>
                <a href="/music/">
                  <i class="fa fa-headphones" aria-hidden="true"></i>
                  歌单
                </a>
              </li>
            
              <li>
                <a href="/tags/图集/">
                  <i class="fa fa-photo" aria-hidden="true"></i>
                  图集
                </a>
              </li>
            
          </ul>
        
      </li>
    
      <li>
        <a href="/comment/">
          <span class="faa-parent animated-hover">
            <i class="fa  fa-pencil-square-o faa-tada" aria-hidden="true"></i>
            留言板
          </span>
        </a>
        
      </li>
    
      <li>
        <a href="/links/">
          <span class="faa-parent animated-hover">
            <i class="fa  fa-link faa-shake" aria-hidden="true"></i>
            友人帐
          </span>
        </a>
        
      </li>
    
      <li>
        <a href="/donate/">
          <span class="faa-parent animated-hover">
            <i class="fa  fa-heart faa-pulse" aria-hidden="true"></i>
            赞赏
          </span>
        </a>
        
      </li>
    
      <li>
        <a href="/">
          <span class="faa-parent animated-hover">
            <i class="fa  fa-leaf faa-wrench" aria-hidden="true"></i>
            关于
          </span>
        </a>
        
          <ul class="sub-menu">
            
              <li>
                <a href="/about/">
                  <i class="fa fa-meetup" aria-hidden="true"></i>
                  我？
                </a>
              </li>
            
              <li>
                <a href="/theme-sakura/">
                  <i class="fa iconfont icon-sakura" aria-hidden="true"></i>
                  主题
                </a>
              </li>
            
              <li>
                <a href="/lab/">
                  <i class="fa fa-cogs" aria-hidden="true"></i>
                  Lab
                </a>
              </li>
            
          </ul>
        
      </li>
    
      <li>
        <a href="/client/">
          <span class="faa-parent animated-hover">
            <i class="fa  fa-android faa-vertical" aria-hidden="true"></i>
            客户端
          </span>
        </a>
        
      </li>
    
      <li>
        <a href="/atom.xml">
          <span class="faa-parent animated-hover">
            <i class="fa  fa-rss faa-pulse" aria-hidden="true"></i>
            RSS
          </span>
        </a>
        
      </li>
    
  </ul>
  <p style="text-align: center; font-size: 13px; color: #b9b9b9;">&copy 2019 hexo-sakura</p>
</div>
<button onclick="topFunction()" class="mobile-cd-top" id="moblieGoTop" title="Go to top" style="display: none;"><i class="fa fa-chevron-up" aria-hidden="true"></i></button>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.css">
<script src="https://cdn.jsdelivr.net/npm/aplayer/dist/APlayer.min.js"></script>
<!-- require MetingJS -->
<script src="https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js"></script>
<style>
  .aplayer .aplayer-lrc {
    height: 35px;
  }
  .aplayer .aplayer-lrc p{
    font-size: 16px;
    font-weight: 700;
    line-height: 18px !important;
  }
  .aplayer .aplayer-lrc p.aplayer-lrc-current{
    color: #FF1493;
  }
  .aplayer.aplayer-narrow .aplayer-body{
    left: -66px !important;
  }
  .aplayer.aplayer-fixed .aplayer-lrc {
    display: none;
  }
  .aplayer .aplayer-lrc.aplayer-lrc-hide {
      display:none !important;
  }
  .aplayer.aplayer-fixed .lrc-show {
    display: block;
    background: rgba(255, 255, 255, 0.8);
  }
</style>
<meting-js

    id="2660651585"

    server="netease"

    type="playlist"

    fixed="true"

    autoplay="true"

    loop="all"

    order="random"

    preload="auto"

    volume="0.7"

    mutex="true"

</meting-js>
<script>
  $(function(){
    $('body').on('click', '.aplayer', function(){
      if($('.aplayer-button').hasClass('aplayer-play')) {
        $('.aplayer-lrc').removeClass('lrc-show');
      } else {
        $('.aplayer-lrc').addClass('lrc-show');
      }
    })
  });
</script>
</body>
</html>